home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 8
/
FM Towns Free Software Collection 8.iso
/
t_os
/
menukuru
/
menukuru.c
next >
Wrap
C/C++ Source or Header
|
1994-06-01
|
5KB
|
178 lines
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <msdos.cf>
#include <mos.h>
#include <egb.h>
#include <sidework.h>
#define ui unsigned int
#define FILLUP for( i = 0; i < _lupy; i++ ){ \
_movedata( ds, ( ui )fill, seg, i * vxbyte, xbyte );\
}
#define FILLDOWN for( i = _lupy + c; i <= 479; i++ ){ \
_movedata( ds, ( ui )fill, seg, i * vxbyte, xbyte); \
}
#define NOMDSP( jg ) FILLUP; \
for( i = 0, c = 0; i < 480; i++ ){ \
if( jg ){ \
_movedata( ds, ( ui )p + i * xbyte, \
seg, ( _lupy + c++ ) * vxbyte, xbyte); \
} \
} \
FILLDOWN;
#define REVDSP( jg ) FILLUP; \
for( i = 0, c = 0; i < 480; i++ ){ \
if( jg ){ \
_movedata \
( ds, ( ui )p + ((( 480 - 1 ) - i) * xbyte), \
seg, ( _lupy + c++ ) * vxbyte, xbyte); \
} \
} \
FILLDOWN;
int
main()
{
char *p, fill[ 640 ], mwork[ 4096 ];
int xbyte,vxbyte,seg;
int ds,i,c,_lupy,b,x,y,exitf = 0;
int page0,page1,sdk = 0;
EGB_getResolution( &page0, &page1 );
switch( page0 ){
case 12:
if( NULL == ( p = malloc( 640 * 480 ))){
sdk_start( 75 );
sdk = 1;
if( NULL == ( p = malloc( 640 * 480 )))return 1;
}
xbyte = 640;
seg = 0x10C;
vxbyte = 1024;
break;
case 3:
if( NULL == ( p = malloc( 640 * 480 / 2 ))){
sdk_start( 38 );
sdk = 1;
if( NULL == ( p = malloc( 640 * 480 / 2 )))return 1;
}
xbyte = 320;
seg = 0x104;
vxbyte = 512;
break;
default:
return 1;
}
if( p == NULL )return 1;
MOS_start( mwork, 4096 );
ds = getds();
for( i = 0; i < 480; i++ ){
_movedata( seg, i * vxbyte, ds, ( ui )p + i * xbyte, xbyte );
}
memset( fill, 0, sizeof( fill ));
do{
for( i = 0; i < 480; i++ ){ /* 正常な絵を書く */
_movedata( ds, ( int )p + i * xbyte, seg, i * vxbyte, xbyte);
}
if( exitf )break;
_lupy = 240 - (( 480 * 11 / 12 ) >> 1);
NOMDSP( i % 12 );
MOS_rdpos( &b,&x,&y );exitf |= b;
_lupy = 240 - ((480 * 10 / 12) >> 1);
NOMDSP(i % 6);
_lupy = 240 - ((480 * 9 / 12) >> 1);
NOMDSP(i % 4);
_lupy = 240 - ((480 * 8 / 12) >> 1);
NOMDSP(i % 3);
MOS_rdpos( &b,&x,&y );exitf |= b;
_lupy = 240 - ((480 * 6 / 12) >> 1);
NOMDSP(i % 2);
_lupy = 240 - ((480 * 4 / 12) >> 1);
NOMDSP(!(i % 3));
_lupy = 240 - ((480 * 2 / 12) >> 1);
NOMDSP(!(i % 6));
MOS_rdpos( &b,&x,&y );exitf |= b;
_lupy = 240 - ((480 * 1 / 12) >> 1);
REVDSP(!(i % 12));
_lupy = 240 - ((480 * 2 / 12) >> 1);
REVDSP(!(i % 6));
_lupy = 240 - ((480 * 4 / 12) >> 1);
REVDSP(!(i % 3));
MOS_rdpos( &b,&x,&y );exitf |= b;
_lupy = 240 - ((480 * 6 / 12) >> 1);
REVDSP(i % 2);
_lupy = 240 - ((480 * 8 / 12) >> 1);
REVDSP(i % 3);
_lupy = 240 - ((480 * 9 / 12) >> 1);
REVDSP(i % 4);
MOS_rdpos( &b,&x,&y );exitf |= b;
_lupy = 240 - ((480 * 10 / 12) >> 1);
REVDSP(i % 6);
_lupy = 240 - ((480 * 11 / 12) >> 1);
REVDSP(i % 12);
MOS_rdpos( &b,&x,&y );exitf |= b;
for(i = 0; i < 480; i++){
_movedata( ds, ( ui )p + ((( 480 - 1 ) - i) * xbyte ),
seg, i * vxbyte, xbyte );
}
_lupy = 240 - ((480 * 11 / 12) >> 1);
REVDSP(i % 12);
_lupy = 240 - ((480 * 10 / 12) >> 1);
REVDSP(i % 6);
MOS_rdpos( &b,&x,&y );exitf |= b;
_lupy = 240 - ((480 * 9 / 12) >> 1);
REVDSP(i % 4);
_lupy = 240 - ((480 * 8 / 12) >> 1);
REVDSP(i % 3);
_lupy = 240 - ((480 * 6 / 12) >> 1);
REVDSP(i % 2);
MOS_rdpos( &b,&x,&y );exitf |= b;
_lupy = 240 - ((480 * 4 / 12) >> 1);
REVDSP(!(i % 3));
_lupy = 240 - ((480 * 2 / 12) >> 1);
REVDSP(!(i % 6));
MOS_rdpos( &b,&x,&y );exitf |= b;
_lupy = 240 - ((480 * 1 / 12) >> 1);
NOMDSP(!(i % 12));
_lupy = 240 - ((480 * 2 / 12) >> 1);
NOMDSP(!(i % 6));
_lupy = 240 - ((480 * 4 / 12) >> 1);
NOMDSP(!(i % 3));
MOS_rdpos( &b,&x,&y );exitf |= b;
_lupy = 240 - ((480 * 6 / 12) >> 1);
NOMDSP(i % 2);
_lupy = 240 - ((480 * 8 / 12) >> 1);
NOMDSP(i % 3);
_lupy = 240 - ((480 * 9 / 12) >> 1);
NOMDSP(i % 4);
_lupy = 240 - ((480 * 10 / 12) >> 1);
MOS_rdpos( &b,&x,&y );exitf |= b;
NOMDSP(i % 6);
_lupy = 240 - ((480 * 11 / 12) >> 1);
NOMDSP(i % 12);
}while(1);
free( p );
MOS_end();
if( sdk )sdk_terminate( NULL, NULL, NULL );
return 0;
}